<?php
class Indicator_dao extends Base_dao
{	
	function __construct()
    {
		parent::__construct();
		
		$this->nombreTabla = 'indicator';
		$this->nombreColumnaID = 'id';
		$this->nombreModelo = 'Indicator_dto';
		
		$this->load->model("$this->nombreModelo");
	}
	
	public function guardar($objIndicatorDTO)
	{		
		// Controlar si guarda bien, ya que se está llamando al método padre
		$result = parent::guardar($this->nombreTabla, $this->nombreColumnaID, $objIndicatorDTO, $objIndicatorDTO->id);
		
		if($result['exito'])
		{
			if ($objIndicatorDTO->id == 0) { $objIndicatorDTO->id = $result['idGenerado']; }
		}
		
		return $result;
	}

	
	public function borrar($idIndicator)
	{
		$result = parent::borrar($this->nombreTabla, $this->nombreColumnaID, $idIndicator);	
		return $result;
	}
	
	public function obtenerDatos($condiciones = array(), $crearObjetos = false, $limite = 0)
	{	
		return parent::obtenerDatos($this->nombreTabla, $this->nombreModelo, $condiciones, $crearObjetos, $limite);
	}
	
	public function obtenerObjetos($condiciones = array(), $limite = 0)
	{
		return $this->obtenerDatos($condiciones, true, $limite);
	}
	
	public function obtenerObjetoPorID($idBuscado)
	{
		$obj = parent::obtenerObjetoPorID($this->nombreTabla, $this->nombreColumnaID, $this->nombreModelo, $idBuscado);
		if($obj == NULL) $obj = new Indicator_dto();
		
		return $obj;
	}
	
	public function getTreeStructure($idOutput = 0)
	{	
		$sentenciaSQL = "SELECT  indicator.id AS id,
								 indicator.name AS name,
								 indicator.idOwner AS idOwner,
								 user.firstName AS firstname,
								 user.lastName AS lastname
						 FROM indicator
						 LEFT JOIN user ON indicator.idOwner = user.id
						 WHERE indicator.idOutput = " . $idOutput . "
						 ORDER BY indicator.name";
		return $this->db->query($sentenciaSQL);
	}
	
	public function setOwner($idIndicator, $idUser)
	{
		$campos = array('idOwner' => $idUser);
		$this->db->where("$this->nombreColumnaID", $idIndicator);
		$result['exito'] = $this->db->update("$this->nombreTabla", $campos);
		$result['error_msg'] = $this->db->_error_message();
		return $result;
	}	

	public function canChangeOwner($idIndicator)
	{
		$indicator = $this->obtenerObjetoPorID($idIndicator);
		if($indicator->idOwner != 0) {
			$this->load->model('Round_input_dao');

        	// Compruebo si existen el owner ya registró su resumen en round inputs
			$condiciones['idIndicator'] = $indicator->id;
			$condiciones['idUser'] = $indicator->idOwner;
			$consulta = $this->Round_input_dao->obtenerObjetos($condiciones);
			if (sizeof($consulta) == 0) { // No se registran entradas, se puede modificar el owner
				 return TRUE;
			}
			else {
				// Si hubiera entradas, dejo modificar el owner sólo si la ronda NO está abierta
				$this->load->model('Round_dao');
				
				foreach ($consulta as $r_input) {
					$round = $this->Round_dao->obtenerObjetoPorID($r_input->idRound);
					if ($this->Round_dao->roundOpen($round->startDate, $round->endDate)) return FALSE;
				}
				
				return TRUE;
			};
		}
		else return TRUE;
	}
}